#include<stdio.h>
// 提供strlen()函数的原型
#include<string.h>
// 预处理器定义常量, 编译时程序中所有的DENSITY都会被替换成62.4
// 人体密度(磅/立方英尺)
#define DENSITY 62.4
// 定义字符串
#define PRAISE "Your are an extraordinary being." //32
// 定义字符
#define BEEP '\a'
int main()
{
    float weight, volume;
    int size, letters;
    // name是一个可容纳40个字符的数组
    // 由于字符串必须以空字符\0结尾, 所以 "x" 和 'x' 是不一样的
    // 'x' 是基本类型char
    // "x" 是派生类型char数组, 里面有两个字符 x 和 \0
    char name[40];

    printf("Your first name?\n");
    //scanf在遇到第一个空白(空格, 制表符, 换行符)时就不再读取输入了, 即只读取第一个单词
    scanf("%s", name);
    printf("Hi! %s, Your weight in pounds?\n", name);
    scanf("%f", &weight);
    // sizeof运算符: 以字节为单位给出对象大小 
    size = sizeof name;// 运算对象是类型时, 必须加圆括号, 运算对象是特定量时, 可以不加圆括号,  建议都加
    // strlen函数: 获得字符串中的字符长度
    letters = strlen(name);

    // 一个字节存储一个字符, 但这两种方法得到的结果不一定相同
    // strlen不计空字符 sizeof要计空字符
    printf("Your name of %zd letters occupies %zd memory cells.\n", strlen(name), sizeof name);
    printf("The phrase of praise has %zd letters ", strlen(PRAISE));
    printf("and occupies %zd memory cells.\n", sizeof PRAISE);

    volume = weight / DENSITY;
    printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume);
    printf("Also, your first name has %d letters,\n", letters);
    printf("And we have %d bytes to store it.\n", size);
    return 0;
}

